Distributed systems, e.g., software-defined networks with switches, firewalls, network controllers or cloud-bases IT systems comprising storage devices like databases, computation devices, front-ends, etc. are more and more widespread and complex, and they can malfunction for many reasons, including malicious components, software bugs, and hardware or network failures. Conventionally monitoring components of the distributed system verify at runtime whether their performed actions comply with given policies is a possibility for debugging and auditing distributed systems, making such a distributed system more robust and secure. Such conventional policies specify, e.g., what actions must and must not be performed by a component of said distributed system, depending on its previously performed actions, and possibly also actions performed by other components. Such conventional policies may express timing constraints on the actions, e.g., the action B must be performed at most 5 milliseconds after the action A. There are known policy specification languages for expressing such kind of policies, which are based on formal languages, e.g., temporal logics and finite-state machines.
Conventional runtime-verification methods make different assumptions for a distributed system and handle different specifications, differing in their expressivity. For example, it is assumed that the communication within the distributed system is reliable, e.g. no message is lost and a uniform/negligible delay for messages. Furthermore, based on these assumptions, different soundness and completeness guarantees (false positives and false negatives) of the verdicts describing e.g. when and which action caused a policy violation that the monitoring component outputs are provided.
A further conventional runtime-verification method is disclosed in the non-patent literature of D. Basin, F. Klaedtke, and E. Zalinescu, “Failure-aware Runtime Verification of Distributed Systems”, in the Proceedings of the 35th IARCS Annual Conference on Foundations of Software Technology and Theoretical Computer Science (FSTTCS), 2015.